`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2024/03/22 10:30:56
// Design Name: 
// Module Name: ctrl
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////

// 第四位显示udp的发送情况
module tx_ctrl(
    input               clk                 ,
    input               rst_n               ,
    input      [7:0]    arp_gmii_tx_data    ,
    input               arp_gmii_tx_en      ,
    input               arp_tx_done         ,
    input               arp_tx_busy         ,
    input               arp_rx_done         ,
    input      [7:0]    icmp_gmii_tx_data   ,
    input               icmp_gmii_tx_en     ,
    input               icmp_tx_done        ,
    input               icmp_tx_busy        ,
    input      [7:0]    udp_gmii_tx_data    ,
    input               udp_gmii_tx_en      ,
    input               udp_rx_done         ,
    input               udp_tx_done         ,
    input               udp_tx_busy         ,
    output reg          gmii_tx_en          ,
    output reg [7:0]    gmii_tx_data        ,
    output     [3:0]    led                     
    );

reg [3:0] cnt_udp_tx;

always @(posedge clk or negedge rst_n) begin
    if(~rst_n)
        cnt_udp_tx <= 4'd0;
    else 
        cnt_udp_tx <= udp_tx_done ? (cnt_udp_tx + 4'd1) :  cnt_udp_tx;
end

assign led[3:0] = cnt_udp_tx;

// 对 gmii_tx_en 和 gmii_tx_data 进行时序控制
always @(posedge clk or negedge rst_n) begin
    if(~rst_n)begin
        gmii_tx_en <= 1'd0;
        gmii_tx_data <= 8'd0;
    end
    else begin
        if(arp_tx_busy)begin
            gmii_tx_en <= arp_gmii_tx_en;
            gmii_tx_data <= arp_gmii_tx_data;
        end
        else if(udp_tx_busy)begin
            gmii_tx_en <= udp_gmii_tx_en;
            gmii_tx_data <= udp_gmii_tx_data;
        end
        else if(icmp_tx_busy)begin
            gmii_tx_en <= icmp_gmii_tx_en;
            gmii_tx_data <= icmp_gmii_tx_data;
        end
        else begin
            gmii_tx_en <= 1'd0;
            gmii_tx_data <= 8'd0;
        end
    end
end
endmodule
